package TaskRouter

import (
	"fmt"
	"net/http"
	"time"

	TaskDb "gitee.com/under-my-umbrella/gocode/db/task"
	"github.com/gin-gonic/gin"
)

func SetupTasksRoutes(api *gin.RouterGroup) {
	tasks := api.Group("/tasks")

	tasks.GET("", getAllTasks)
	tasks.GET("/:id", getTaskById)
	tasks.POST("", createTask)
	tasks.PUT("/:id", updateTask)
	tasks.DELETE("/:id", deleteTask)
}

// 获取所有任务
func getAllTasks(c *gin.Context){
	tasks, err := TaskDb.GetAllTask(c.Query("user_id"))
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
		return
	}
	c.JSON(http.StatusOK, tasks)
}

// 获取单个任务
func getTaskById(c *gin.Context) {
	task, err := TaskDb.GetTaskById(c.Param("id"))
	if err != nil {
		c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
		return
	}
	c.JSON(http.StatusOK, task)
}

// 创建任务
func createTask(c *gin.Context){
	// 定义任务结构体
	var task TaskDb.Task
	// 绑定JSON到结构体
	if err := c.ShouldBindJSON(&task); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}

	// 设置创建时间和更新时间
	now := time.Now()
	task.Created_At = now.Format(time.RFC3339)
	task.Updated_At = now.Format(time.RFC3339)
	fmt.Println(task)

	// 保存任务到数据库或进行其他操作
	TaskDb.SaveTask(task)

	// 返回成功响应
	c.JSON(http.StatusOK, gin.H{"data": "success"})
}

// 更新任务
func updateTask(c *gin.Context){
	// 获取任务ID
	id := c.Param("id")
	// 定义任务结构体
	var task TaskDb.Task
	// 绑定JSON到结构体
	if err := c.ShouldBindJSON(&task); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}
	// 设置更新时间
	now := time.Now()
	task.Updated_At = now.Format(time.RFC3339)
	// 保存任务到数据库或进行其他操作
	TaskDb.UpdateTask(id, task)
	// 返回成功响应
	c.JSON(http.StatusOK, gin.H{"data": "success"})
}

// 删除任务
func deleteTask(c *gin.Context){
	// 获取任务ID
	id := c.Param("id")
	// 删除任务
	TaskDb.DeleteTask(id)
	// 返回成功响应
	c.JSON(http.StatusOK, gin.H{"data": "success"})
}